
    public class w2 {

        public static int maxSubArraySum(int[] nums) {
            if (nums == null || nums.length == 0) {
                return 0;
            }

            // 初始化当前最大子数组和为数组的第一个元素
            int maxSoFar = nums[0];
            // 初始化当前子数组和为数组的第一个元素
            int currMax = nums[0];

            // 遍历数组，从第二个元素开始
            for (int i = 1; i < nums.length; i++) {
                // 如果当前子数组和为负，则丢弃它，从下一个元素开始新的子数组
                // 否则，将当前元素加到当前子数组和上
                currMax = Math.max(nums[i], currMax + nums[i]);
                // 更新迄今为止找到的最大子数组和
                maxSoFar = Math.max(maxSoFar, currMax);
            }

            return maxSoFar;
        }

        public static void main(String[] args) {
            int[] nums = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
            System.out.println("最大子数组和为: " + maxSubArraySum(nums));
        }
    }

